<?php
error_reporting(-1);
class Telnet
{
    function telnet($host='127.0.0.1', $port=23)
    {
        $this->sock = fsockopen($host, $port);
        socket_set_timeout($this->sock, 1);
    }

    function close()
    {
        if ($this->sock) fclose($this->sock);
        $this->sock = NULL;
    }

    function write($buffer)
    {
        $buffer = str_replace(chr(255), chr(255) . chr(255), $buffer);
        fwrite($this->sock, $buffer);
    }

    function getc()
    {
        return fgetc($this->sock);
    }

    function read_till($what)
    {
        $buf = '';
        while (1) {
            $IAC = chr(255);

            $DONT = chr(254);
            $DO = chr(253);

            $WONT = chr(252);
            $WILL = chr(251);

            $theNULL = chr(0);

            $c = $this->getc();

            if ($c === false) return $buf;
            if ($c == $theNULL) {
                continue;
            }

            if ($c != $IAC) {
                $buf .= $c;

                if ($what == (substr($buf, strlen($buf) - strlen($what)))) {
                    return $buf;
                } else {
                    continue;
                }
            }

            $c = $this->getc();

            if ($c == $IAC) {
                $buf .= $c;
            } else if (($c == $DO) || ($c == $DONT)) {
                $opt = $this->getc();
                fwrite($this->sock, $IAC . $WONT . $opt);
            } elseif (($c == $WILL) || ($c == $WONT)) {
                $opt = $this->getc();
                fwrite($this->sock, $IAC . $DONT . $opt);
            } else {
            }
        }
    }
}
$telnet = new Telnet("127.1",23);
$telnet->read_till(":> ");
$telnet->write("sysoption\r\n");
echo $telnet->read_till(":> ");
$telnet->close();